// const p1 = new Promise((resolve) => {
//   console.log(1);
//   resolve();
// });
// const p2 = new Promise((resolve, reject) => {
//   reject();
// });

// p1.then((res) => console.log(2));

// setTimeout(() => {
//   console.log(3);
// }, 0);

// setTimeout(() => {
//   p2.catch((res) => console.log(4));
// }, 0);

// console.log(5);

// async function getRes() {
//   console.log(6);
//   await p1;
//   console.log(7);
// }
// getRes().then((res) => {
//   console.log(8);
// });

// 异步顺序的问题 js执行机制
// 同步
// 1 5 6
// 异步 : 微任务
// 2 7 8
// 异步 : 宏任务
// 3 4
console.time('time1')
setTimeout(() => {
  console.log(1);
  console.timeEnd('time1')
},0);

// console.log(2);
console.time("time");
setImmediate(() => {
  console.log(3);
  console.timeEnd("time");
}); 

process.nextTick(() => {
  console.log(4);
})

// console.time('time2')
// for (let index = 0; index < 1000000; index++) {
//   if(index>999999){
//     console.log(index)
//   }
// }
// console.timeEnd('time2')

Promise.resolve(5).then((res) => console.log(res)).then(() => console.log(6)).finally(() => console.log(7));
// then : 可以无限次的链式调用
function asyncFn(){
  return new Promise((resolve) => {
    // console.log(8);
    setTimeout(() => {
      console.log(9);
      resolve(10);
    },5);
  })
}
asyncFn().then((res) => console.log(res));
// 2 8 4 5 6 7 1 9 10 3 √
// 2 8 4 5 6 7 1 3 9 10
// 2 8 4 1 3 5 6 7 9 10
// 2 4 8 
// 2 8 4 5 6 9 1 7 3 10 


// 同步 
// 2  8
// 异步微任务
// 4 5 6 7
// 异步宏任务
// 1 3 9 10